home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / datelib.exe / OSTERN_S.C < prev    next >
C/C++ Source or Header  |  1992-03-27  |  2KB  |  75 lines

  1. static char ost_prg[] = "@(#)char *ostern_s(int jjjj)";
  2. static char ost_ver[] = "@(#)v1.00/kr+K.Rupp ; 10.08.91";
  3. /* ostern_s     basiert auf der Funktion long ostern(int jjjj) aus der
  4.                 Sammlung C-Funktionen I v2.0 von K.Rupp.
  5.                 Es wird das Osterdatum im Jahr jjjj ermittelt.
  6.                 Es wird ein String im Format "tt.mm.jjjj" zurückgegeben,
  7.                 der z.B. mit der Funktion cnvtdate() in ein anderes Format
  8.                 konvertiert werden kann. Der String gibt das Datum für
  9.                 den Ostersonntag aus.
  10.                 Die Funktion arbeitet z.Z. im Zeitraum 1700 - 2199 und gibt
  11.                 einen NULL-Zeiger zurück, falls das Jahr außerhalb liegt.
  12. */
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16.  
  17. char *ostern_s(int jjjj)
  18. {
  19.    char datum[11];
  20.    int a, b, c, d, e, N, tt, mm;
  21.    int M = 23;
  22.  
  23.    datum[0] = '\0';
  24.  
  25.    switch(jjjj/100)
  26.    {
  27.        case  17:                       /* 1700 bis 1799 */
  28.                    N = 3;
  29.                    break;
  30.        case  18:                       /* 1800 bis 1899 */
  31.                    N = 4;
  32.                    break;
  33.        case  19:                       /* 1900      ..  */
  34.        case  20:                       /*  ..  bis 2099 */
  35.                    M++;
  36.                    N = 5;
  37.                    break;
  38.        case  21:                       /* 2100 bis 2199 */
  39.                    M++;
  40.                    N = 6;
  41.                    break;
  42.        default:
  43.                    return(NULL);
  44.    } /* ENDE: switch(jjjj/100) */
  45.  
  46.    a = jjjj % 19;
  47.    b = jjjj %  4;
  48.    c = jjjj %  7;
  49.    d = (19*a + M) % 30;
  50.    e = (2*b + 4*c + 6*d + N) % 7;
  51.  
  52.    tt  = 22 + d + e;
  53.    mm  = 3;  /* März  */
  54.    if (tt < 22 || tt > 31)  {
  55.        tt = d + e - 9;
  56.        mm++;  /* April */
  57.    }
  58.  
  59.    if (mm == 4)  {   /* wenn April  */
  60.        if (tt == 26)
  61.            tt =  19;
  62.        if (tt == 25  &&  d == 28  &&  a > 10)
  63.            tt =  18;
  64.    }
  65.  
  66.    /* Umwandlung in String :
  67.    */
  68.    sprintf(datum,"%2.2d.%2.2d.%4.4d",tt,mm,jjjj);
  69.    datum[10] = '\0';
  70.  
  71.    return(datum);
  72.  
  73. } /* ENDE: ostern_s() */
  74.  
  75.